﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using SIIE_ERP.View;
using Elysium.Demo.Controls;

namespace Elysium.Demo.Inventarios.Catalogos
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class Kit_Edita : UserControl, IPropiedadesNavegacion
    {
        ////////////////////////////////////////////////////////////////////////////
        //  PROPIEDADES DE NAVEGACION
        public string Texto { get { return _texto; } }
        public TabControl TabControlPadre { get { return _tabControlPadre; } }
        public TabItem TabItemPadre { get { return _tabItemPadre; } }

        private string _texto;
        private TabControl _tabControlPadre;
        private TabItem _tabItemPadre;

        public void setParametros(string Texto, ref TabControl tabControl, ref TabItem tabItem)
        {
            this._texto = Texto; this._tabControlPadre = tabControl; this._tabItemPadre = tabItem;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }
        // FIN DE PROPIEDADES DE NAVEGACION
        ///////////////////////////////////////////////////////////////////////////

        private UsuarioActivo _sesion;
        private Int32 Id;

        public Kit_Edita(UsuarioActivo usuario, string Id)
        {
            InitializeComponent();
            this._sesion = usuario;
            this.Id = Int32.Parse(Id);
            CargaCatalogos();
            CargaDatos();
            CargaListadoArticulos();
            CargaArticulos();
        }


        List<CAutocomplete> listaCompleta;

        private void CargaListadoArticulos()
        {
            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var articulos = db.Get_Articulos().Rows;
            listaCompleta = new List<CAutocomplete>();
            foreach (DataRow row in articulos)
            {
                if (row["Desc_Tipo_Articulo"].ToString().Equals("Producto") || row["Desc_Tipo_Articulo"].ToString().Equals("Servicio"))
                {
                    var displayedValue = row["Clave"].ToString() + " - " + row["Nombre"].ToString() + " por " + row["Desc_UM"];
                    listaCompleta.Add(new CAutocomplete(row["Id_Articulo"].ToString(), displayedValue));
                }
            }
            FilteredComboArticulo.ItemsSource = listaCompleta;
        }

        private void CargaDatos()
        {
            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var articulo = db.Get_Articulo_Por_Id(Id).Rows[0];

            CampoClave.Text = articulo["Clave"].ToString();
            CampoNombre.Text = articulo["Nombre"].ToString();
            CampoMarca.Text = articulo["Marca"].ToString();
            CampoCodigoBarras.Text = articulo["Codigo_Barras"].ToString();
            CampoDescripcion.Text = articulo["Descripcion"].ToString();
            CampoNombreCorto.Text = articulo["NombreTicket"].ToString();
            ComboGrupo.SelectedValue = articulo["Id_GrupoProductos"].ToString();
            ComboUnidad.SelectedValue = articulo["Id_UM"].ToString();
            ComboSubgrupo.SelectedValue = articulo["Id_SubgrupoProductos"].ToString();
            CheckDisponible.IsChecked = bool.Parse(articulo["EsVendible"].ToString());
            CheckDescontinuado.IsChecked = bool.Parse(articulo["EsDescontinuado"].ToString());
            ComboMoneda.SelectedValue = articulo["Id_Moneda"].ToString();
            ComboTasa.SelectedValue = articulo["Id_TasaImpuesto"].ToString();

            CampoPrecioListaConImpuesto.Text = articulo["Precio_Lista"].ToString();
            CampoPrecioMinimoConImpuesto.Text = articulo["Precio_Minimo"].ToString();

            CalculaTasaImpuestos(ComboTasa.SelectedValue.ToString());
        }

        

        private void CalculaTasaImpuestos(string value)
        {
            CampoPrecioListaSinImpuesto.Text = SIIE_ERP.Codigo.Inventarios.Impuestos.CalculaImpuestos(CampoPrecioListaConImpuesto.Text,
                                                                                                       value,
                                                                                                       _sesion);
            CampoPrecioMinimoSinImpuesto.Text = SIIE_ERP.Codigo.Inventarios.Impuestos.CalculaImpuestos(CampoPrecioMinimoConImpuesto.Text,
                                                                                                       value,
                                                                                                       _sesion);
        }

        private void CargaCatalogos()
        {
            ComboBoxUI.ComboGrupoProductos(ComboGrupo, _sesion);
            ComboBoxUI.ComboMonedas(ComboMoneda, _sesion);
            ComboBoxUI.ComboUnidadMedida(ComboUnidad, _sesion);
            ComboBoxUI.ComboTasasImpuestos(ComboTasa, _sesion);
        }

        private void Button_GuardarInfoGeneral_Click(object sender, RoutedEventArgs e)
        {
            if (!Valida()) return;

            var Clave = CampoClave.Text;
            var Nombre = CampoNombre.Text;
            var NombreCorto = CampoNombreCorto.Text;
            var Descripcion = CampoDescripcion.Text;
            var Marca = CampoMarca.Text;
            var Unidad = Int32.Parse(ComboUnidad.SelectedValue.ToString());
            var CodigoBarras = CampoCodigoBarras.Text;
            var Grupo = Int32.Parse(ComboGrupo.SelectedValue.ToString());
            var Subgrupo = Int32.Parse(ComboSubgrupo.SelectedValue.ToString());
            var Disponible = (bool)CheckDisponible.IsChecked;
            var Descontinuado = (bool)CheckDescontinuado.IsChecked;
            var Moneda = Int32.Parse(ComboMoneda.SelectedValue.ToString());
            var Tasa = Int32.Parse(ComboTasa.SelectedValue.ToString());
            var PrecioLista = Double.Parse(CampoPrecioListaConImpuesto.Text);
            var PrecioMinimo = Double.Parse(CampoPrecioMinimoConImpuesto.Text);

            var IdKit = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_TipoArticulo().Get_Id_Kit();

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);

            if (db.Update_Articulo_Por_Id(Id, 
                                  Clave, Nombre, NombreCorto, Descripcion, CodigoBarras, Marca, Int32.Parse(IdKit), Grupo, Subgrupo,
                                  1, 1, 1, Unidad, Disponible, Descontinuado, Moneda, PrecioLista, PrecioMinimo, Tasa, 1, 1, 1,
                                  0, 0).Id == 1)
            {
                MessageBox.Show("Kit editado correctamente.");
                _tabControlPadre.Items.Remove(_tabItemPadre);
            }
            else
            {
                MessageBox.Show("Error al editar el kit.");
            }
        }

        private void ComboGrupo_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBoxUI.ComboSubGrupoProductos(ref ComboSubgrupo, _sesion, Int32.Parse((e.AddedItems[0] as CItem).Id));
        }

        private bool Valida()
        {
            try { Int32.Parse(ComboUnidad.SelectedValue.ToString()); }
            catch (Exception)
            {
                MessageBox.Show("Debe seleccionar una unidad de medida."); return false;
            }
            try { Int32.Parse(ComboGrupo.SelectedValue.ToString()); }
            catch (Exception)
            {
                MessageBox.Show("Debe seleccionar un grupo de producto."); return false;
            }
            try { Int32.Parse(ComboSubgrupo.SelectedValue.ToString()); }
            catch (Exception)
            {
                MessageBox.Show("Debe seleccionar un subgrupo de producto."); return false;
            }
            try { Int32.Parse(ComboMoneda.SelectedValue.ToString()); }
            catch (Exception)
            {
                MessageBox.Show("Debe seleccionar una moneda."); return false;
            }
            try { Int32.Parse(ComboTasa .SelectedValue.ToString()); }
            catch (Exception)
            {
                MessageBox.Show("Debe seleccionar una tasa de impuesto."); return false;
            }
            try { Double.Parse(CampoPrecioListaConImpuesto.Text); }
            catch (Exception)
            {
                MessageBox.Show("El Precio de lista con impuesto debe ser un numero."); return false;
            }
            try { Double.Parse(CampoPrecioMinimoConImpuesto.Text); }
            catch (Exception)
            {
                MessageBox.Show("El precio minimo con impuesto debe ser un numero."); return false;
            }
            return true;
        }

        List<CArticuloKit> listaKit;

        private void CargaArticulos()
        {
            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Kit_Detalle(_sesion.RFC, _sesion.UserName);
            listaKit = new List<CArticuloKit>();

            var articulos = db.Get_Kit_Detalle_Por_Id(Id).Rows;

            foreach (DataRow art in articulos)
            {
                var IdA = art["Id_Kit_Detalle"].ToString();
                var Nombre = art["Desc_Nombre"].ToString();
                var Clave = art["Desc_Clave"].ToString();
                var Cantidad = art["Cantidad"].ToString();
                listaKit.Add(new CArticuloKit(IdA, Clave, Nombre, Cantidad));
            }

            ArticulosKitDataGrid.ItemsSource = listaKit;
        }

        class CArticuloKit
        {
            public string Id { get; set; }
            public string Clave { get; set; }
            public string Nombre { get; set; }
            public string Cantidad { get; set; }
            public string Eliminar { get { return "Eliminar"; } }
            public CArticuloKit(string Id, string Clave, string Nombre, string Cantidad)
            {
                this.Id = Id;
                this.Nombre = Nombre;
                this.Clave = Clave;
                this.Cantidad = Cantidad;
            }
        }

        private void Button_AgregarArticulo_Click(object sender, RoutedEventArgs e)
        {
            if (FilteredComboArticulo.SelectedValue != null)
            {
                double Cantidad;
                try
                {
                    Cantidad = Double.Parse(CampoCantidad.Text);
                }
                catch (Exception)
                {
                    MessageBox.Show("El campo Cantidad debe ser númerico."); return;
                }
                var IdArticulo = Int32.Parse(FilteredComboArticulo.SelectedValue.ToString());
                var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Kit_Detalle(_sesion.RFC, _sesion.UserName);

                if (db.Insert_Kit_Detalle(Id, IdArticulo, Cantidad).Id != 1)
                {
                    MessageBox.Show("Error al agregar el artículo."); return;
                }
                else
                {
                    CargaArticulos();
                }
            }
        }

        private void EliminarContacto_Click(object sender, RoutedEventArgs e)
        {
            var rowSelected = ArticulosKitDataGrid.SelectedIndex;
            if (rowSelected < 0) return;

            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Kit_Detalle(_sesion.RFC, _sesion.UserName);

            if (MessageBox.Show("¿Esta seguro de eliminar este registro?", "Eliminar", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                var IdKit = Int32.Parse(listaKit[rowSelected].Id);
                if (db.Delete_Kit_Detalle_Por_Id(IdKit).Id == 1)
                {
                    CargaArticulos();
                }
                else
                {
                    MessageBox.Show("Error al eliminar el artículo de la base de datos.");
                }
            }
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("Kit_Articulos.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }
    }
}
